#include "TestAction.h"
#include<QMenuBar>
#include<QMenu>
#include<QAction>
#include<QToolBar>
#include<QDebug>

TestAction::TestAction(QWidget *parent, Qt::WindowFlags flags)
    : QMainWindow(parent,flags)
{
    //this->setAttribute(Qt::WA_DeleteOnClose); //关闭时销毁

    //1 ​​菜单项
    // 获取主窗口的菜单栏（如果不存在，menuBar() 会自动创建一个）
    QMenuBar *menuBar = this->menuBar();
    // 创建“文件”菜单
    QMenu *fileMenu = menuBar->addMenu("&File"); // & 表示快捷键 Alt+F
    // 向“文件”菜单中添加动作（菜单项）
    QAction *newAction = new QAction("New", this);
    newAction->setShortcut(QKeySequence::New); // 设置标准快捷键 Ctrl+N
    QAction *openAction = new QAction("Open", this);
    openAction->setShortcut(QKeySequence::Open); // 设置标准快捷键 Ctrl+O
    QAction *exitAction = new QAction("Quit", this);
    exitAction->setShortcut(QKeySequence::Quit); // 设置标准快捷键 Ctrl+Q
    fileMenu->addAction(newAction);
    fileMenu->addAction(openAction);
    fileMenu->addSeparator(); // 添加一个分隔线
    fileMenu->addAction(exitAction);
    connect(newAction,&QAction::triggered,this,&TestAction::slot_new);
    connect(openAction,&QAction::triggered,this,&TestAction::slot_open);
    connect(exitAction,&QAction::triggered,this,&TestAction::close);

    //2.​​工具栏按钮
    // 创建一个工具栏
    QToolBar *toolBar = this->addToolBar("Main Toolbar");
    // 向工具栏中添加动作（可以是之前为菜单创建的动作，也可以是新的）
    newAction->setToolTip("create new file");
    newAction->setIcon(QIcon(":/images/new.png"));
    openAction->setToolTip("open file");
    openAction->setIcon(QIcon(":/images/file-open.png"));
    QAction *closeAction = new QAction("&close", this); //仅使用 & 符号创建助记符，而非快捷键
    closeAction->setShortcut(QKeySequence("Alt+c"));// 设置快捷键 Alt+c
    closeAction->setIcon(QIcon(":/images/close.png"));
    toolBar->addAction(newAction);
    toolBar->addAction(openAction);
    toolBar->addAction(closeAction);

    connect(closeAction,&QAction::triggered,this,&TestAction::slot_close);


}

void TestAction::contextMenuEvent(QContextMenuEvent *event)
{
    //3 ​​上下文菜单项
    // 创建菜单对象
    QMenu menu(this);

    // 添加动作
    QAction *action1 = menu.addAction("Action 1");
    QAction *action2 = menu.addAction("Action 2");
    QAction *action3 = menu.addAction("Action 3");

    // 连接动作的信号到槽函数
    connect(action1, &QAction::triggered, this, &TestAction::slot_Action1);
    connect(action2, &QAction::triggered, this, &TestAction::slot_Action2);
    connect(action3, &QAction::triggered, this, &TestAction::slot_Action3);

    // 在事件发生的位置显示菜单
    menu.exec(event->globalPos());
}

void TestAction::slot_new()
{
    qDebug()<<"slot_new";
}

void TestAction::slot_open()
{
    qDebug()<<"slot_open";
}

void TestAction::slot_close()
{
    qDebug()<<"slot_close";
}

void TestAction::slot_Action1()
{

}

void TestAction::slot_Action2()
{

}

void TestAction::slot_Action3()
{

}
